#pragma once
#include "core.h"

namespace noria {

	class IMarshal : public IReflectable
	{
	public:
		virtual IReflectable* Box(int value) const = 0;
		virtual IReflectable* Box(long value) const = 0;
		virtual IReflectable* Box(double value) const = 0;
		virtual IReflectable* Box(bool value) const = 0;
		virtual IReflectable* Box(const char* value) const = 0;
		virtual IReflectable* Box(const wchar_t* value) const = 0;

		virtual void Unbox(const IReflectable& ref, int& value) const = 0;
		virtual void Unbox(const IReflectable& ref, long& value) const = 0;
		virtual void Unbox(const IReflectable& ref, double& value) const = 0;
		virtual void Unbox(const IReflectable& ref, bool& value) const = 0;
		virtual void Unbox(const IReflectable& ref, const char*& value) const = 0;
		virtual void Unbox(const IReflectable& ref, const wchar_t*& value) const = 0;
	};
	DECLARE_DISPOSABLE(IMarshal);
}
